{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Reparameterization Trick\n",
    "\n",
    "Inspired from the example given by Goker Erdogan http://gokererdogan.github.io/2016/07/01/reparameterization-trick/\n",
    "\n",
    "Suppose we have a Normal distribution parameterized by $\\theta$: \n",
    "\n",
    "$$x \\sim p_\\theta(x) = N(\\theta,1) = \\frac{1}{\\sqrt{2\\pi}}e^{-\\frac{1}{2}(x-\\theta)^2}$$\n",
    "\n",
    "We draw samples from it and then use those samples to find the minimum of: $J(\\theta) = E_{x \\sim p_\\theta(x)}[x^2]$. And we do so using gradient descent.\n",
    "\n",
    "### Score/Reinforce way\n",
    "\n",
    "We take a derivative of $J(\\theta)$ with respect to $\\theta$:\n",
    "\n",
    "$$\\nabla_\\theta J(\\theta)$$ \n",
    "$$= \\nabla_\\theta  E_{x \\sim p_\\theta(x)}[x^2]$$\n",
    "$$= \\nabla_\\theta \\int{p_\\theta(x) x^2 dx}$$\n",
    "$$= \\int{\\nabla_\\theta{p_\\theta(x)} x^2 dx}$$\n",
    "$$= \\int{\\frac{p_\\theta(x)}{p_\\theta(x)} \\nabla_\\theta{p_\\theta(x)} x^2 dx}$$\n",
    "$$= \\int{p_\\theta(x) \\frac{\\nabla_\\theta{p_\\theta(x)}}{p_\\theta(x)}  x^2 dx}$$\n",
    "$$= \\int{p_\\theta(x) \\nabla_\\theta{log{p_\\theta(x)}  x^2 dx}}$$\n",
    "$$= E_{x \\sim p_\\theta(x)} [\\nabla_\\theta{log{p_\\theta(x)}}  x^2]$$\n",
    "\n",
    "We can now use Monte Carlo estimate of this using samples:\n",
    "\n",
    "$$\\widehat{\\nabla_\\theta J(\\theta)} = \\frac{1}{N} \\sum_{i=1}^{N} \\nabla_\\theta{log{p_\\theta(x_i)}}  x_i^2$$\n",
    "\n",
    "Substituting expression for $p_\\theta(x)$ from above and taking a log followed by gradient wrt $\\theta$, we get:\n",
    "\n",
    "$$\\widehat{\\nabla_\\theta J(\\theta)} = \\frac{1}{N} \\sum_{i=1}^{N} (x_i-\\theta)  x^2_i \\;\\;\\;\\; \\text{...(1)}$$\n",
    "\n",
    "\n",
    "### Reparameterization Trick\n",
    "\n",
    "Let: $$x = \\theta+\\epsilon \\;\\;\\;\\; {\\text{where}} \\;\\;\\; \\epsilon \\sim N(0,1)$$ \n",
    "\n",
    "This reparameterization leaves the distribution: \n",
    "\n",
    "$$p_\\theta(x) = N(\\theta,1)$$\n",
    "\n",
    "Let us now again calculate $\\nabla_\\theta J(\\theta) = \\nabla_\\theta E_{x \\sim p_\\theta(x)}[x^2]$\n",
    "\n",
    "$$\\nabla_\\theta J(\\theta)$$ \n",
    "$$= \\nabla_\\theta  E_{x \\sim p_\\theta(x)}[x^2]$$\n",
    "$$= \\nabla_\\theta  E_{\\epsilon \\sim N(0,1)}[(\\theta+\\epsilon)^2]$$\n",
    "As Expectation does not depend on $\\theta$, we can move the gradient inside without getting in the `log` issue as in previous method:\n",
    "\n",
    "$$= \\nabla_\\theta \\int{p(\\epsilon) (\\theta+\\epsilon)^2 d\\epsilon}$$\n",
    "$$=  \\int{p(\\epsilon) \\nabla_\\theta(\\theta+\\epsilon)^2 d\\epsilon}$$\n",
    "$$=  \\int{p(\\epsilon) 2(\\theta+\\epsilon) d\\epsilon}$$\n",
    "$$= E_{\\epsilon \\sim N(0,1)}[2 (\\theta+\\epsilon)] $$\n",
    "\n",
    "Next, we convert Expectation to MC estimate to get:\n",
    "\n",
    "$$\\widehat{\\nabla_\\theta J(\\theta)} = \\frac{1}{N} \\sum_{i=1}^{N} 2(\\theta+\\epsilon_i) \\;\\;\\;\\; \\text{...(2)}$$\n",
    "\n",
    "### Experiment\n",
    "\n",
    "Let us say $\\theta=2$\n",
    "\n",
    "1) We generate samples for $x \\sim N(\\theta,1)$ and use these samples in equation (1) to calculate the REINFORCE estimate of $\\nabla_\\theta J(\\theta)$\n",
    "\n",
    "2) We generate samples for $\\epsilon \\sim N(0,1)$ and use these samples in equation (2) to calculate the Reparameterized estimate of $\\nabla_\\theta J(\\theta)$\n",
    "\n",
    "\n",
    "We do so for various values of N and compare the estimate of $\\nabla_\\theta J(\\theta)$ in both the cases. We also calculate the Variance of the estimate in both the cases.\n",
    "\n",
    "\n",
    "**We can see that Variance is lot higher in REINFORCE as compared to Reparameterization - almost higher by one more of magnitude. This is the Apporach of Reparameterization that we will use in Soft Actor Critic.**\n",
    "\n",
    "You can also analytically derive the mean and variance of Equations (1) and (2) as below:\n",
    "\n",
    "### Mean and Variance of Gradient Estimator in Equation (1):  mean=4; variance=87/N\n",
    "\n",
    "$$E[\\widehat{\\nabla_\\theta J(\\theta)}] = E[\\frac{1}{N} \\sum_{i=1}^{N} (x_i-\\theta)  x^2_i]$$\n",
    "$$ = \\frac{1}{N} \\sum_{i=1}^{N} E[(x_i-\\theta)  x^2_i]$$\n",
    "$$ = \\frac{1}{N} \\sum_{i=1}^{N} E[x_i^3]-\\theta E[x^2_i]$$\n",
    "$$ = \\frac{1}{N} \\sum_{i=1}^{N} E[x_i^3]-\\theta E[x^2_i]$$\n",
    "$$ = \\frac{1}{N} \\sum_{i=1}^{N} (\\mu^3+3 \\mu {\\sigma}^2) -\\theta (\\mu^2+\\sigma^2)$$\n",
    "$$ = (\\mu^3+3 \\mu {\\sigma}^2) -\\theta (\\mu^2+\\sigma^2)$$\n",
    "\n",
    "putting $\\theta=\\mu$ and $\\sigma=1$:\n",
    "\n",
    "$$ = (2^3+3.2.1) -2.(2^2+1) = 14-10 = 4$$\n",
    "\n",
    "Again, we calculate the variance of gradient estimate in equation (1)\n",
    "\n",
    "$$Var(\\widehat{\\nabla_\\theta J(\\theta)}) = var(\\frac{1}{N} \\sum_{i=1}^{N} (x_i-\\theta)  x^2_i)$$\n",
    "$$ = \\frac{1}{N^2} \\sum_{i=1}^{N} var(x_i^3-\\theta.x^2_i)$$\n",
    "$$ = \\frac{1}{N^2} \\sum_{i=1}^{N} E[(x_i^3-\\theta.x^2_i)^2] - (E[x_i^3-\\theta.x^2_i])^2 $$\n",
    "$$ = \\frac{1}{N^2} \\sum_{i=1}^{N} E[x_i^6+\\theta^2x_i^4-2.\\theta.x^3_ix^2_i] - (E[x_i^3-\\theta.x^2_i])^2 $$\n",
    "$$ = \\frac{1}{N} \\left[ {\\mu ^{6}+15\\mu ^{4}\\sigma ^{2}+45\\mu ^{2}\\sigma ^{4}+15\\sigma ^{6}}+\\theta^2 ({ \\mu ^{4}+6\\mu ^{2}\\sigma ^{2}+3\\sigma ^{4}})-2.\\theta({\\mu ^{5}+10\\mu ^{3}\\sigma ^{2}+15\\mu \\sigma ^{4}}) - ({\\mu ^{3}+3\\mu \\sigma ^{2}}-\\theta.({\\mu ^{2}+\\sigma ^{2}}))^2 \\right]$$\n",
    "\n",
    "Putting $\\theta=\\mu=2, \\;\\; \\text{and} \\;\\; \\sigma=1$:\n",
    "\n",
    "\n",
    "$$Var(\\widehat{\\nabla_\\theta J(\\theta)}) = \\frac{1}{N}[2^6+15.2^4+45.2^2+15+4(2^4+6.2^2+3)-4(2^5+10.2^3+15.2)-(2^3+3.2-2(2^2+1))^2]$$\n",
    "\n",
    "$$Var(\\widehat{\\nabla_\\theta J(\\theta)}) = \\frac{1}{N}[64+240+180+15+4(16+6.4+3)-4(32+10.8+15.2)-(8+3.2-2(4+1))^2]$$\n",
    "\n",
    "$$Var(\\widehat{\\nabla_\\theta J(\\theta)}) = \\frac{1}{N}[64+240+180+15+4(16+6.4+3)-4(32+10.8+15.2)-(8+3.2-2(4+1))^2]$$\n",
    "\n",
    "$$Var(\\widehat{\\nabla_\\theta J(\\theta)}) = \\frac{87}{N}$$\n",
    "\n",
    "\n",
    "### Mean and Variance of Gradient Estimator in Equation (2):  mean=4; variance=4/N\n",
    "\n",
    "$$E[\\widehat{\\nabla_\\theta J(\\theta)}] = E[\\frac{1}{N} \\sum_{i=1}^{N} 2(\\theta+\\epsilon_i)]$$\n",
    "$$= \\frac{1}{N} \\sum_{i=1}^{N} 2E[(\\theta+\\epsilon_i)]$$\n",
    "$$= \\frac{1}{N} \\sum_{i=1}^{N} 2.\\theta$$\n",
    "$$ E[\\widehat{\\nabla_\\theta J(\\theta)}] = 2.\\theta = 4$$\n",
    "\n",
    "Let us calculate the variance\n",
    "\n",
    "$$Var(\\widehat{\\nabla_\\theta J(\\theta)}) = Var(\\frac{1}{N} \\sum_{i=1}^{N} 2(\\theta+\\epsilon_i))$$\n",
    "$$ = \\frac{1}{N^2} \\sum_{i=1}^{N} Var(2(\\theta+\\epsilon_i))$$\n",
    "$$ = \\frac{1}{N^2} \\sum_{i=1}^{N} Var(2\\epsilon_i)$$\n",
    "$$ = \\frac{1}{N^2} \\sum_{i=1}^{N} 4.Var(\\epsilon_i)$$\n",
    "$$ = \\frac{1}{N^2} \\sum_{i=1}^{N} 4.1$$\n",
    "$$ Var(\\widehat{\\nabla_\\theta J(\\theta)})= \\frac{4}{N}$$\n",
    "\n",
    "### Conclusion from Analytical Solution\n",
    "\n",
    "We can see analytically that Estimate of Gradient in equation (1) and (2) both is equal to **mean=4**. However, Variance in method/equation 1 is $\\frac{87}{N}$ vs that in method 2 being $\\frac{87}{N}$:\n",
    "\n",
    "$$mean_1 = mean_2 = 4$$\n",
    "$$\\frac{var_1}{var_2} = \\frac{87}{4} = 21.75$$\n",
    "\n",
    "We see that REINFORCE/SCORE approach has a higher variance, almost by one order of magnitude higher.\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Running the Experiment"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[3.9594517 4.0059223 4.001595  3.9991515 4.0000978]\n",
      "[3.9938738 3.9990325 4.000404  4.0001597 4.0000286]\n",
      "[8.6134996e+00 8.9461190e-01 8.7127462e-02 8.7124994e-03 8.7552355e-04]\n",
      "[3.9568284e-01 4.0059362e-02 4.1218330e-03 3.9399523e-04 4.0149374e-05]\n"
     ]
    }
   ],
   "source": [
    "import numpy as np\n",
    "Ns = [10,100,1000,10000,100000]\n",
    "runs=10000\n",
    "\n",
    "theta = 2.0\n",
    "\n",
    "grad_reinforce = lambda x: np.sum((x-theta) * np.square(x)) / x.size\n",
    "grad_reparam = lambda eps: np.sum(2 * (theta+eps)) / eps.size\n",
    "\n",
    "mean_reinforce = np.zeros_like(Ns, dtype=np.float32)\n",
    "var_reinforce = np.zeros_like(Ns, dtype=np.float32)\n",
    "\n",
    "mean_reparam = np.zeros_like(Ns, dtype=np.float32)\n",
    "var_reparam = np.zeros_like(Ns, dtype=np.float32)\n",
    "\n",
    "runs_reinforce = np.zeros(runs)\n",
    "runs_reparam = np.zeros(runs)\n",
    "for i,N in enumerate(Ns):\n",
    "    for r in range(runs):\n",
    "        x = np.random.default_rng().normal(theta, 1, N)\n",
    "        runs_reinforce[r] = grad_reinforce(x)\n",
    "        eps = np.random.default_rng().normal(0, 1, N)\n",
    "        runs_reparam[r] = grad_reparam(eps)\n",
    "    \n",
    "    mean_reinforce[i] = np.mean(runs_reinforce)\n",
    "    var_reinforce[i] = np.var(runs_reinforce)\n",
    "    \n",
    "    mean_reparam[i] = np.mean(runs_reparam)\n",
    "    var_reparam[i] = np.var(runs_reparam)\n",
    "    \n",
    "print (mean_reinforce)\n",
    "print (mean_reparam)\n",
    "print\n",
    "print (var_reinforce)\n",
    "print (var_reparam)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "mean_reinforce:\n",
      " [3.9594517 4.0059223 4.001595  3.9991515 4.0000978]\n",
      "\n",
      "mean_reparam:\n",
      " [3.9938738 3.9990325 4.000404  4.0001597 4.0000286]\n",
      "\n",
      "ratio of means:\n",
      " [0.9913813  1.0017228  1.0002978  0.99974793 1.0000173 ]\n",
      "\n",
      "\n",
      "var_reinforce\n",
      " [8.6134996e+00 8.9461190e-01 8.7127462e-02 8.7124994e-03 8.7552355e-04]\n",
      "\n",
      "var_reparam\n",
      " [3.9568284e-01 4.0059362e-02 4.1218330e-03 3.9399523e-04 4.0149374e-05]\n",
      "\n",
      "ratio of variances:\n",
      " [21.768696 22.332155 21.138039 22.11321  21.806654]\n"
     ]
    }
   ],
   "source": [
    "print ('mean_reinforce:\\n', mean_reinforce)\n",
    "print ('\\nmean_reparam:\\n', mean_reparam)\n",
    "print ('\\nratio of means:\\n', mean_reinforce/mean_reparam)\n",
    "print ()\n",
    "print ()\n",
    "print ('var_reinforce\\n',var_reinforce)\n",
    "print ('\\nvar_reparam\\n',var_reparam)\n",
    "print ('\\nratio of variances:\\n',var_reinforce/var_reparam)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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PXsWlZWVCAoKwqZNm5CQkNDV3aVbtOX4HT58GN988w1iY2N1ddt169ahX79+Xd1dMqAtxzAjIwNPPvmkbrLtM888w+NnQdr67yhZprYcv7y8PEybNg2AZtXeE088gUGDBnVKfxhYOmj37t3m7gK101133QW1Wm3ublAHDB48GGfOnDF3N8hEZs2aZe4ukJF69uyJs2fPdslrsSTUAi8vL0gkkmYT+PLy8uDn52emXlFb8fhZPx5D68djaN0s7fgxsLTAwcEBAwcOxJ49e3Tb1Go19uzZw5KPFeDxs348htaPx9C6Wdrx69YloYqKCly9elV3Pz09HWfOnIGHhwdCQkKwYMECzJw5E3fccQcGDx6MDz/8EJWVlZg9e7YZe01aPH7Wj8fQ+vEYWjerOn6dsvbISuzdu1cA0Ow2c+ZMXZuPP/5YCAkJERwcHITBgwcL//vf/8zXYdLD42f9eAytH4+hdbOm48drCREREZHF4xwWIiIisngMLERERGTxGFiIiIjI4jGwEBERkcVjYCEiIiKLx8BCREREFo+BhYiIiCweAwsRERFZPAYWIiIisngMLETUpUQiEbZu3dopz339+nWIRCKcOXOmU55fa8+ePejduzdUKpVRjyssLISPjw9+//33TuoZke1iYCGyMQUFBZgzZw5CQkIglUrh5+eHxMREHD582Nxd63TBwcHIyclB3759O/V1Fi1ahKVLl0IikQAAvvrqK4hEIowbN06vXUlJCUQiEfbt2wcA8PLywowZM/Daa691av+IbBEDC5GNmT59Ok6fPo21a9ciJSUFP/74I0aOHImbN2+au2udTiKRwM/PD3Z2nXch+kOHDuHatWuYPn263nY7Ozvs3r0be/fubfXxs2fPxtdff42ioqJO6yORLWJgIbIhJSUlOHjwIN555x2MGjUKoaGhGDx4MBYvXow//OEPunYrVqxAv3794OzsjODgYDz99NOoqKjQ7f/qq6/g5uaGbdu2ISoqCk5OTvjjH/+IqqoqrF27FmFhYXB3d8ezzz6rVxYJCwvD3//+dzz00ENwdnZGYGAgPvnkk1b7nJWVhQceeABubm7w8PDAlClTcP369RbbFxcX4+GHH4a3tzccHR0RGRmJNWvWAGheEpo1axZEIlGzm3bEQ6lUYuHChQgMDISzszOGDBmi29eSjRs3YuzYsZDJZHrbnZ2d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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "%matplotlib inline\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "fig = plt.figure()\n",
    "ax = plt.subplot(111)\n",
    "\n",
    "ax.plot(Ns, mean_reinforce, label='Reinforce')\n",
    "ax.plot(Ns, mean_reparam, label='Reparam')\n",
    "ax.set_xscale('log')\n",
    "ax.set_xlabel('Sample size (N)')\n",
    "\n",
    "plt.title('Gradient Est(mean)')\n",
    "ax.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "%matplotlib inline\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "fig = plt.figure()\n",
    "ax = plt.subplot(111)\n",
    "\n",
    "ax.plot(Ns, var_reinforce, label='Reinforce')\n",
    "ax.plot(Ns, var_reparam, label='Reparam')\n",
    "ax.set_xscale('log')\n",
    "ax.set_xlabel('Sample size (N)')\n",
    "\n",
    "plt.title('Gradient Est(variance)')\n",
    "ax.legend()\n",
    "plt.show()"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.18"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
